#ifndef BINARYSEARCH_H
#define BINARYSEARCH_H

#include "searchalgorithm.h"

// ⏵ 二分查找算法类
// 继承自抽象基类 SearchAlgorithm，用于在排序后的数组中查找目标值
class BinarySearch : public SearchAlgorithm {
public:
    // 构造函数：初始化查找数组
    BinarySearch(const QVector<int>& values);

    // 执行一步查找逻辑
    void step() override;

    // 判断是否完成查找
    bool isFinished() const override;

    // 获取当前可视化数据（含颜色信息）
    const QVector<SortBar>& getData() const override;

    // 设置要查找的目标值
    void setTarget(int value) override;

    // 是否找到了目标值
    bool isFound() const override;

    // 获取找到的位置索引（若未找到为 -1）
    int getFoundIndex() const override;

    // 返回算法描述文字（用于 UI 说明）
    QString getDescription() const override;

    // 获取并重置比较次数
    int getAndResetCompareCount() override;

private:
    QVector<SortBar> bars;   // 可视化数据，每个元素包含值和颜色

    int low, high, mid;      // 当前查找区间的边界和中点
    int target;              // 查找目标值

    bool found;              // 是否找到了目标
    bool finished;           // 查找是否完成
    int foundIndex;          // 找到的位置索引
    int compareCount;        // 本轮 step 中的比较计数
};

#endif // BINARYSEARCH_H
